Skip to content

feat: add official AXI skill and fleet intake guidance - #149

Merged
Freudator86 merged 3 commits into
mainfrom
fm/fm-write-axi-skill
Aug 19, 2026
Merged

feat: add official AXI skill and fleet intake guidance#149
Freudator86 merged 3 commits into
mainfrom
fm/fm-write-axi-skill

Conversation

@Freudator86

Copy link
Copy Markdown
Collaborator

Intent

The captain asked for a 'write-axi' skill: how to build an agent-ergonomic CLI to the AXI contract (source: https://axi.md/), and - first - the habit of checking whether one already exists, because this fleet twice in one day planned to build a tool that already existed (a Forgejo client filed 2026-08-17 when forgejo-axi was already published; and a plan that said 'adopt sc1's archive tool' when that tool had never been persisted).

The captain then redirected the task three times mid-flight, and those redirections are the intent, not the original brief:

  1. STOP before writing skill content: an OFFICIAL AXI skill already exists at github.com/kunchenguid/axi, installable with 'npx skills add kunchenguid/axi'. Install and read it first, then decide: either this task produces NOTHING, or a thin fleet-specific overlay that POINTS AT the official one and adds only what is ours. Do not restate anything the official skill already says.
  2. Sharpen the catalogue check: one index is not enough. forgejo-axi is on npm and NOT in the axi.md catalogue; docker-axi IS in the catalogue and 404s on npm. The two indexes disagree in BOTH directions, so the rule is: check the axi.md catalogue AND the package registry, and state which you checked alongside the result. Also: the repo ships packages/axi-sdk-js, so building an AXI tool is SDK work rather than hand-rolling; registering a tool is a pull request to catalog.yaml via CONTRIBUTING.md; absence from the catalogue means only that nobody added an entry, not that a tool is unofficial or unmaintained.
  3. Final ruling, after the captain read the official skill from source: DO NOT WRITE A COMPETING SKILL. Instead install the official skill into this repo's tracked skill surface through the normal path, and place our four fleet-specific additions where they do not compete with it - check both indexes, tokens never on a command line and never emitted, licence and provenance rules for deriving, and the open ownership question. If a short pointer section is the right home rather than a skill, say so and do that; firstmate-coding-guidelines' one-owner rule governs.

So this change deliberately does NOT contain a fleet-written description of the AXI design contract. That absence is the point. The contract is installed verbatim from upstream at .agents/skills/axi/ (MIT, by Kun Chen) together with the installer's skills-lock.json manifest, and docs/axi-skill-provenance.md records the upstream commit 408a653, the install date, the content hash, and the MIT notice - which is also copied to .agents/skills/axi/LICENSE beside the copy.

Decisions made while doing the work, which a reviewer reading only the diff would not know:

  • The installed file .agents/skills/axi/SKILL.md is upstream's and is deliberately NOT edited. It contains em dashes that this repository forbids in its own tracked Markdown, and its frontmatter lacks the user-invocable and metadata.internal fields that every skill this repository authors must declare. Both are intentional. Editing it would diverge it from the hash skills-lock.json records and turn the next 'npx skills add' update into a conflict. Do not 'fix' either one; docs/axi-skill-provenance.md and CONTRIBUTING.md both state this explicitly.
  • Because of that, tests/fm-instruction-owners.test.sh's frontmatter trigger floor was changed to EXEMPT skills listed in skills-lock.json from the frontmatter half, while still requiring each to be reachable from AGENTS.md section 13 so an installed skill cannot become dead weight. The exempt set is read from the manifest via a new fm_installed_skill_dirs helper in tests/lib.sh rather than hardcoded, deliberately matching the existing reason that check enumerates the skills directory instead of keeping a list: a hand-maintained list goes stale silently.
  • The fleet's four additions live in a SEPARATE skill, .agents/skills/axi-tool-intake/, not in the installed file and not as an AGENTS.md section. A skill was chosen over a pointer section on the placement tree in firstmate-coding-guidelines: roughly 100 lines of conditional detail that fires only at tool intake belongs in a skill with a section 13 trigger, not inline in AGENTS.md where every session pays for it, and it must never be mixed into vendored material that gets re-synced.
  • It was renamed from the captain's original name 'write-axi' to 'axi-tool-intake' precisely because 'write-axi' would compete with the installed 'axi' skill in the harness skill listing and invite an agent to load the wrong one believing it had the design contract. The captain approved this rename after the fact.
  • The overlay carries NO design guidance by construction and never names a principle of the contract; tests/fm-axi-tool-intake.test.sh enforces that with explicit negative assertions.
  • Two corrections to the fleet's own briefing, resolved in favour of the measured source and recorded in the files: the Forgejo miss was fourteen days, not one (npm shows forgejo-axi 1.0.0 on 2026-08-03), and the axi.md catalogue would not have caught it at all since it still does not list it. The two-index disagreement is also wider than reported: jj-axi is catalogue-listed and 404s on npm as well as docker-axi.
  • README.md previously claimed every skill under .agents/skills/ carries metadata.internal: true. This change falsified that claim, so the sentence was corrected rather than left standing.
  • skills-lock.json was added to the tracked shared-material lists in AGENTS.md section 1 and CONTRIBUTING.md, because it is now tracked root material that governs .agents/skills/.

On tests: tests/fm-axi-tool-intake.test.sh asserts on prose and on a sha256, deliberately. Neither skill ships any code - what they carry is an attribution, a boundary between someone else's words and ours, and four rules whose entire value is that they are written down. The repository has established precedent for exactly this in tests/fm-codebase-sweep.test.sh and the domain-modeling attribution checks in tests/fm-instruction-owners.test.sh, both of which assert on adopted-material prose for the same reason: a dropped licence notice, a silently edited upstream file, or a fleet rule quietly reattributed to an external specification are all invisible at load time, because the skill still loads and still works. The sha256 assertion in particular is a real behavioral contract over an installed artifact: it detects a local edit to a vendored file that would break the installer's update path.

Nothing here writes, installs, or publishes an actual AXI tool - the captain's brief explicitly excluded that. Land as a true merge commit; this repository forbids squash.

What Changed

  • Install the official AXI skill verbatim with its MIT license, lock manifest, and provenance record.
  • Add a fleet-specific AXI intake skill covering catalogue and registry checks, credential handling, derivation provenance, and deployment ownership.
  • Update skill ownership rules and contract tests to preserve vendored content while requiring installed skills to remain reachable.

Risk Assessment

✅ Low: The change is well-bounded, conforms to the stated intent, and the prior manifest-parsing and test-contract concerns are adequately resolved without introducing material source risk.

Testing

Inspected the focused diff, ran both targeted contract suites, and manually verified the end-user skill discovery/load surface and installer manifest; all checks passed, with command-output evidence captured and no UI screenshot needed because this change exposes instruction skills rather than a rendered interface.

Evidence: End-user skill discovery and loading surface
AGENTS.md exposes `axi` as the verbatim official design contract and `axi-tool-intake` as the separate fleet overlay. `skills-lock.json` resolves `axi` to source `kunchenguid/axi`. The overlay presents exactly four intake areas: both-index discovery, credential handling, derivation provenance/licensing, and the open fleet ownership question.

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

🔧 **Review** - 2 issues found → auto-fixed ✅
  • 🚨 tests/fm-axi-tool-intake.test.sh:96 - Most tests from this function onward only grep the natural-language skill/AGENTS.md sources for required or forbidden phrases. Per the test-quality rule, this cannot demonstrate that agents receive or follow the intake rules; matching prose may be dead while harmless wording changes fail CI. Remove these assertions or test a deterministic generated instruction interface/real skill-loading consumer instead.
  • 🚨 tests/fm-axi-tool-intake.test.sh:36 - The test checks skills-lock.json with raw substrings, and fm_installed_skill_dirs likewise extracts skillPath using a line-oriented regex. JSON may remain semantically identical after formatting changes, making these checks fail or silently omit installed skills. Parse the manifest into a normalized semantic model with the repository's JSON consumer (for example jq) and assert the decoded fields.

🔧 Fix: Harden manifest parsing and reshape AXI contract tests
✅ Re-checked - no issues remain.

✅ **Test** - passed

✅ No issues found.

  • bash tests/fm-axi-tool-intake.test.sh
  • bash tests/fm-instruction-owners.test.sh
  • Manually exercised the AGENTS.md skill-discovery surface, decoded skills-lock.json with jq, and displayed both skills’ frontmatter plus the overlay’s four-section interface
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

coditan added 3 commits August 19, 2026 09:16
…ake rules

The ordered deliverable was a fleet-written `write-axi` skill describing the AXI
contract. That was the wrong remedy: the official `axi` skill already exists, is
273 lines working all ten principles with examples, and `principles.yaml`
upstream states outright that the full specification of each principle lives in
it. A second description would have been a copy that drifts. So the contract is
installed rather than restated, and only what the specification does not cover is
written here.

Installed: `.agents/skills/axi/` via `npx skills add kunchenguid/axi`, verbatim,
plus the `skills-lock.json` manifest the installer writes. MIT; the notice
travels in `.agents/skills/axi/LICENSE` beside the copy and again in
`docs/axi-skill-provenance.md`, which records the upstream commit (408a653), the
content hash, and why the file is never edited here - editing it diverges it from
the installer's recorded hash and makes the next update a conflict.

Added: `.agents/skills/axi-tool-intake/`, carrying no design guidance by
construction, for the four things that are ours:

1. Check BOTH indexes before building, and state which you checked. They
   disagree in both directions, measured 2026-08-19: `forgejo-axi` is on npm at
   1.2.0 and absent from the axi.md catalogue; `docker-axi` and `jj-axi` are in
   the catalogue and 404 on npm. Checking one and finding nothing proves nothing.
   An absent catalogue entry means only that nobody filed the pull request.
2. Credentials are never a command-line value and never emitted, and are verified
   by effect. The specification is silent on this; the rule is labelled as ours.
3. Deriving reads the specific upstream's own licence file, carries the copyright
   notice with the derived work, and names upstream, version, commit and change
   in the provenance record. Build on `axi-sdk-js` rather than hand-rolling.
4. How a finished tool reaches every seat is OPEN, tracked as `fleet-forgejo-axi`
   and `fm-axi-nomistakes-guidance-off-argv`. Publication to the public catalogue
   is separately solved and is not the same question.

Where firstmate's briefing summary disagreed with the measured source, the source
wins and the difference is recorded: the Forgejo miss was fourteen days, not one
(npm shows 1.0.0 on 2026-08-03), and the axi.md catalogue would not have caught
it at all.

The trigger floor in `tests/fm-instruction-owners.test.sh` now exempts skills
listed in `skills-lock.json` from the frontmatter half - an installed file cannot
declare fields this repo invented - while still requiring each to be reachable
from AGENTS.md section 13, so an installed skill can never become dead weight.
The installed set is read from the manifest rather than listed, for the same
staleness reason the check enumerates the directory.

`tests/fm-axi-tool-intake.test.sh` asserts the separation in both directions: the
installed file still hashes to what was installed, its notice is present, and the
overlay names no principle of the contract it defers to.
@Freudator86
Freudator86 merged commit d10ca8d into main Aug 19, 2026
10 checks passed
@Freudator86
Freudator86 deleted the fm/fm-write-axi-skill branch August 19, 2026 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant